﻿// owner 蒋家伟

#pragma once
#include "WeakReference.h"
#include "CommonWidget_home.h"

class QColor;
class QWidget;
namespace jsdk
{
    class COMMONWIDGET_EXPORT IProgressBar : public WeakReference
    {
    public:
        /// \ brief 创建一个圆形进度条
        /// \ note : 由于进度条是防止卡顿的，当进度条创建在主线程中则需要qpp->processevnent强行刷新，而在子线程中则会使用信号与槽的形式回到主线程调用，这会导致内部的qpp->processevnent产生栈溢出的递归崩溃。如果是这种情况，请设置为true
        /// \ in isAsynCalled 是否是异步进度条, 取决使用的场景而不是内部实现，详情见Note
        /// \ in color 进度条颜色, 默认为(0,0,255)
        static OwnerPtr<IProgressBar> create(bool isAsynCalled = false, const QColor* pColor = nullptr);

        /// \ brief 设置进度百分比
        /// \ 限制为0-100的整数
        /// \ 内部会自动刷新
        virtual void setPresent(uint8_t present) = 0;

        /// \ brief 设置固定大小
        /// \ width 宽
        /// \ height 高
        virtual void setFixedSize(uint16_t width, uint16_t height) = 0;

        /// \ brief 显示
        virtual void show() = 0;

        /// \ brief 关闭
        virtual void close() = 0;

        /// \ brief 设置百分前缀
        /// \ note : 默认无前缀，仅显示%数字，设置后可以显示 prefix + %数字
        virtual void setPrefix(const std::wstring& prefix) = 0;

        /// \ brief 设置字体大小
        virtual void setFontSize(uint8_t fontWidth) = 0;

        /// \ brief 设置字体颜色
        virtual void setFontColor(const QColor& color) = 0;

        /// \ brief 设置背景颜色
        virtual void setColor(const QColor& color) = 0;

    public:
        /// \brief 获取Qt窗口对象
        virtual const QWidget* getQWidget() const = 0;

        /// \ brief 获取Qt窗口对象
        virtual QWidget* getQWidget() = 0;
    };
}